//「一本通 1.1 例 2」种树
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN=30000;
const int MAXH=5000;
struct Segest{
    int b,e,t;
    bool operator < (const Segest other)const {
        return e<other.e;
    }
};
int num[MAXN+1];
Segest segs[MAXH+1];
int n,h;
int main(){
    cin>>n>>h;
    for(int k=0;k<h;k++){
        int b,e,t;
        cin>>b>>e>>t;
        segs[k]={b,e,t};
    }
    sort(segs,segs+h);//按建议区间的末尾值排序
    for(int k=0;k<h;k++){
        Segest cur=segs[k];
        for(int i=cur.b;i<=cur.e;i++) if (num[i]==1) cur.t--;
        if (cur.t>0) {
            for(int i=cur.e;i>=cur.b&&cur.t>0;i--)
                if (num[i]==0){
                    num[i]=1;
                    cur.t--;
                }
        }
    }
    int ans=0;
    for(int i=1;i<=n;i++) ans+=num[i];
    cout<<ans;
}
